<?php

namespace AESS;

/**
 * Description of Config
 *
 * @author Elton Schivei Costa
 */
final class Config
{

    private function __construct()
    {
        ;
    }

    public static function Main()
    {
        self::mimes();
        self::general();
        self::logs();
        self::hooks();
        self::uri();
        self::segments();
        self::routes();
    }

    private static function general()
    {
        self::add('allow_get_array', true);
        self::add('global_xss_filtering', true);
        self::add('csrf_protection', false);
        self::add('compress_output', false);
        self::add('cache_path', '');
        self::add('base_url', '');
        self::add('index_page', '');
        self::add('cookie_prefix', '');
        self::add('cookie_domain', '');
        self::add('cookie_path', '/');
        self::add('cookie_secure', false);
        self::add('charset', 'utf-8');
        self::add('language', "\\System\\Language\\English");
        self::add('enable_hooks', true);
        self::add('proxy_ips', '');
    }

    private static function uri()
    {
        self::add('enable_query_strings', false, \CFG_URI);
        self::add('controller_trigger', false, \CFG_URI);
        self::add('function_trigger', false, \CFG_URI);
        self::add('directory_trigger', false, \CFG_URI);
        self::add('permitted_uri_chars', 'a-z 0-9~%.:_\-@', \CFG_URI);
        self::add('uri_protocol', 'AUTO', \CFG_URI);
    }

    private static function segments()
    {
        self::add('url_suffix', '', \CFG_SEGMENTS);
    }

    private static function logs()
    {
        self::add('log_path', "", \CFG_LOGS);
        self::add('log_threshold', 0, \CFG_LOGS);
        self::add('log_date_format', 'Y-m-d H:i:s', \CFG_LOGS);
    }

    private static function routes()
    {
        self::add('routes', array(
            'default_controller' => 'Home',
            '404_override' => ''), \CFG_ROUTES);
    }

    private static function hooks()
    {

    }

    private static function add($key, $value, $type = \CFG_GENERAL)
    {
        \System\Core\Config::Set($type, $key, $value);
    }

    private static function mimes()
    {
        self::add('mimes', array('hqx' => 'application/mac-binhex40',
            'cpt' => 'application/mac-compactpro',
            'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'),
            'bin' => 'application/macbinary',
            'dms' => 'application/octet-stream',
            'lha' => 'application/octet-stream',
            'lzh' => 'application/octet-stream',
            'exe' => array('application/octet-stream', 'application/x-msdownload'),
            'class' => 'application/octet-stream',
            'psd' => 'application/x-photoshop',
            'so' => 'application/octet-stream',
            'sea' => 'application/octet-stream',
            'dll' => 'application/octet-stream',
            'oda' => 'application/oda',
            'pdf' => array('application/pdf', 'application/x-download'),
            'ai' => 'application/postscript',
            'eps' => 'application/postscript',
            'ps' => 'application/postscript',
            'smi' => 'application/smil',
            'smil' => 'application/smil',
            'mif' => 'application/vnd.mif',
            'xls' => array('application/excel', 'application/vnd.ms-excel', 'application/msexcel'),
            'ppt' => array('application/powerpoint', 'application/vnd.ms-powerpoint'),
            'wbxml' => 'application/wbxml',
            'wmlc' => 'application/wmlc',
            'dcr' => 'application/x-director',
            'dir' => 'application/x-director',
            'dxr' => 'application/x-director',
            'dvi' => 'application/x-dvi',
            'gtar' => 'application/x-gtar',
            'gz' => 'application/x-gzip',
            'php' => 'application/x-httpd-php',
            'php4' => 'application/x-httpd-php',
            'php3' => 'application/x-httpd-php',
            'phtml' => 'application/x-httpd-php',
            'phps' => 'application/x-httpd-php-source',
            'js' => 'application/x-javascript',
            'swf' => 'application/x-shockwave-flash',
            'sit' => 'application/x-stuffit',
            'tar' => 'application/x-tar',
            'tgz' => array('application/x-tar', 'application/x-gzip-compressed'),
            'xhtml' => 'application/xhtml+xml',
            'xht' => 'application/xhtml+xml',
            'zip' => array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),
            'mid' => 'audio/midi',
            'midi' => 'audio/midi',
            'mpga' => 'audio/mpeg',
            'mp2' => 'audio/mpeg',
            'mp3' => array('audio/mpeg', 'audio/mpg', 'audio/mpeg3', 'audio/mp3'),
            'aif' => 'audio/x-aiff',
            'aiff' => 'audio/x-aiff',
            'aifc' => 'audio/x-aiff',
            'ram' => 'audio/x-pn-realaudio',
            'rm' => 'audio/x-pn-realaudio',
            'rpm' => 'audio/x-pn-realaudio-plugin',
            'ra' => 'audio/x-realaudio',
            'rv' => 'video/vnd.rn-realvideo',
            'wav' => 'audio/x-wav',
            'bmp' => 'image/bmp',
            'gif' => 'image/gif',
            'jpeg' => array('image/jpeg', 'image/pjpeg'),
            'jpg' => array('image/jpeg', 'image/pjpeg'),
            'jpe' => array('image/jpeg', 'image/pjpeg'),
            'png' => array('image/png', 'image/x-png'),
            'tiff' => 'image/tiff',
            'tif' => 'image/tiff',
            'css' => 'text/css',
            'html' => 'text/html',
            'htm' => 'text/html',
            'shtml' => 'text/html',
            'txt' => 'text/plain',
            'text' => 'text/plain',
            'log' => array('text/plain', 'text/x-log'),
            'rtx' => 'text/richtext',
            'rtf' => 'text/rtf',
            'xml' => 'text/xml',
            'xsl' => 'text/xml',
            'mpeg' => 'video/mpeg',
            'mpg' => 'video/mpeg',
            'mpe' => 'video/mpeg',
            'qt' => 'video/quicktime',
            'mov' => 'video/quicktime',
            'avi' => 'video/x-msvideo',
            'movie' => 'video/x-sgi-movie',
            'doc' => 'application/msword',
            'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
            'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
            'word' => array('application/msword', 'application/octet-stream'),
            'xl' => 'application/excel',
            'eml' => 'message/rfc822',
            'json' => array('application/json', 'text/json')
        ));
    }

}
